package cn.ddiancan.xddcloud.psc.flow.strategy;

import java.util.List;
import java.util.Objects;

import cn.ddiancan.xddcloud.psc.flow.utils.ObjectUtils;
import cn.ddiancan.xddcloud.psc.flow.entity.XddTaskActor;

/**
 * 基于用户或组（角色、部门等）的访问策略类
 * 该策略类适合组作为参与者的情况
 * @since 1.0
 */
public class GeneralAccessStrategy implements TaskAccessStrategy {

    /**
     * 如果创建人ID所属的组只要有一项存在于参与者集合中，则表示可访问
     */
    @Override
    public XddTaskActor isAllowed(String userId, List<XddTaskActor> taskActors) {
        if (null == userId || ObjectUtils.isEmpty(taskActors)) {
            return null;
        }
        // 参与者 ID 默认非组，作为用户ID判断是否允许执行
        return taskActors.stream().filter(t -> Objects.equals(t.getActorId(), userId)).findFirst().orElse(null);
    }
}
